≫ Добавление данных из таблиц
Объединение двух существующих простых таблиц может быть более эффективным, чем индексирование данных с нуля, и может быть желательным в некоторых случаях (например, при объединении таблиц «main» и «delta» вместо простого перестроения «main» в схеме разбиения «main+delta»). Поэтому indexer предоставляет опцию для этого. Объединение таблиц обычно происходит быстрее, чем перестроение, но всё же не мгновенно для больших таблиц. По сути, нужно один раз прочитать содержимое обеих таблиц и один раз записать результат. Объединение таблиц размером 100 ГБ и 1 ГБ, например, приведёт к 202 ГБ ввода/вывода (но это всё ещё, вероятно, меньше, чем требуется для индексирования с нуля).
Основной синтаксис команды выглядит следующим образом:
sudo -u manticore indexer --merge DSTINDEX SRCINDEX [--rotate] [--drop-src]
Если не указан параметр --drop-src, затрагивается только таблица DSTINDEX: содержимое SRCINDEX будет в неё объединено.
Параметр --rotate обязателен, если DSTINDEX уже обслуживается searchd.
Типичная практика — объединять небольшой обновлённый набор из SRCINDEX в DSTINDEX. При объединении атрибутов значения из SRCINDEX имеют приоритет, если встречаются одинаковые идентификаторы документов. Однако обратите внимание, что "старые" ключевые слова не будут автоматически удалены в таких случаях. Например, если в DSTINDEX для документа 123 есть ключевое слово "old", а в SRCINDEX для него есть ключевое слово "new", после объединения документ 123 будет найден по обоим ключевым словам. Чтобы исправить это, можно явно указать условие для удаления документов из DSTINDEX; соответствующий параметр — --merge-dst-range:
sudo -u manticore indexer --merge main delta --merge-dst-range deleted 0 0
Этот параметр позволяет применять фильтры к целевой таблице вместе с объединением. Фильтров может быть несколько; для включения документа в итоговую объединённую таблицу должны быть выполнены все условия. В приведённом выше примере фильтр пропускает только те записи, где 'deleted' равен 0, исключая все записи, помеченные как удалённые.
--drop-src включает удаление SRCINDEX после объединения и до поворота таблиц, что важно, если вы указываете DSTINDEX в killlist_target DSTINDEX. Иначе при повороте таблиц документы, объединённые в DSTINDEX, могут быть подавлены SRCINDEX.